#pragma once
/*--------------------------------------------------------------------------------
 * Adaptive Intelligence - Foundation Framework Class Library
 * Version 2.00
 * 
 * DNS Query Option Enumeration
 *      Lists the types of DNS Query options that may be combined to specify how a DNS query is performed.
 *------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------
 * System Imports
 *------------------------------------------------------------------------------*/
#include "stdafx.h"
using namespace System;
using namespace System::Net;

namespace Adaptive
{
	namespace Network
	{
		namespace Dns
		{
			/// <summary>
			/// Lists the types of DNS Query options that may be combined to specify how a DNS query is performed.
			/// </summary>
			[Flags()]
			public enum class DnsQueryOption
			{
				/// <summary>
				/// Indicates a standard DNS query.
				/// </summary>
				Standard			=	DNS_QUERY_STANDARD,
				/// <summary>
				/// Returns truncated results. Does not retry under TCP.
				/// </summary>
				AcceptTrunacted		=	DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE,
				/// <summary>
				/// Uses TCP only for the query.
				/// </summary>
				UseTcpOnly			=	DNS_QUERY_USE_TCP_ONLY,
				/// <summary>
				/// Directs the DNS server to perform an iterative query (specifically directs the DNS server not to perform 
				/// recursive resolution to resolve the query).
				/// </summary>
				NoRecursion			=	DNS_QUERY_NO_RECURSION,
				/// <summary>
				/// Bypasses the resolver cache on the lookup.
				/// </summary>
				BypassLocalCache	=	DNS_QUERY_BYPASS_CACHE,
				/// <summary>
				/// Directs DNS to perform a query on the local cache only.
				/// </summary>
				NoWireQuery			=	DNS_QUERY_NO_WIRE_QUERY,
				/// <summary>
				/// Directs DNS to ignore the local name.
				/// </summary>
				NoLocalName			=	DNS_QUERY_NO_LOCAL_NAME,
				/// <summary>
				/// Prevents the DNS query from consulting the HOSTS file.
				/// </summary>
				NoHostsFile			=	DNS_QUERY_NO_HOSTS_FILE,
				/// <summary>
				/// Prevents the DNS query from using NetBT for resolution.
				/// </summary>
				NoNetBT				=	DNS_QUERY_NO_NETBT,
				/// <summary>
				/// Prevents the DNS response from attaching suffixes to the submitted name in a name resolution process.
				/// </summary>
				NoSuffixAttachment	=	DNS_QUERY_TREAT_AS_FQDN,
				/// <summary>
				/// Directs DNS to perform a query using the network only, bypassing local information.
				/// </summary>
				OnTheWireOnly		=	DNS_QUERY_WIRE_ONLY,
				/// <summary>
				/// Directs DNS to return the entire DNS response message.
				/// </summary>
				ReturnMessage		=	DNS_QUERY_RETURN_MESSAGE,
				/// <summary>
				/// Prevents the query from using DNS and uses only Local Link Multicast Name Resolution (LLMNR).
				/// <b>Note</b>   This option is available only when using Windows Server 2008 or Windows Vista.
				/// </summary>
				MulticastOnly		=	DNS_QUERY_MULTICAST_ONLY,
				/// <summary>
				/// 
				/// </summary>
				NoMulticast			=	DNS_QUERY_NO_MULTICAST,
				/// <summary>
				/// If set, and if the response contains multiple records, records are stored with the TTL corresponding to 
				/// the minimum value TTL from among all records. When this option is set, "Do not change the TTL of individual 
				/// records" in the returned record set is not modified.
				/// </summary>
				DontResetTtlValues	=	DNS_QUERY_DONT_RESET_TTL_VALUES,
				/// <summary>
				/// Reserved.
				/// </summary>
				Reserved			=	DNS_QUERY_RESERVED
			};
		}
	}
}